package net.siufung.web.aop.annotation;

import net.siufung.web.aop.enums.AutoLimiterType;
import org.springframework.core.annotation.AliasFor;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;

/**
 * 自动限流注解
 * @author 陈建峰
 * @date 2022/10/3 11:54 下午
 * @since V1.0.0
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface AutoLimiter {

    /**
     * 限流key
     * @return String
     */
    String key() default "auto_rate_limiter:";

    /**
     * 每秒并发量
     */
    @AliasFor("value") double perSecond() default Double.MAX_VALUE;

    /**
     * 每秒并发量
     */
    @AliasFor("perSecond") double value() default Double.MAX_VALUE;

    /**
     * 等待时长
     */
    int timeout() default 0;

    /**
     * 超时时间单位
     * @return TimeUnit
     */
    TimeUnit timeOutUnit() default TimeUnit.SECONDS;

    /**
     * 限流类型
     * @return AutoLimiterType
     */
    AutoLimiterType autoLimiterType() default AutoLimiterType.DEFAULT;


}
